package com.wang.generic.util;

import com.wang.generic.service.BusinessService;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * @author: wangning
 * @date: 2024/2/20 9:31
 */
public class ReflectLocalUtil<T extends BusinessService> {

    public static <T> Class getGeneric(T source){
        // 使用@Validated注解使用该代码，中间加getSuperclass()，因为FetchDBCDataService类被SpringAop代理，继承了FetchDBCDataService
        // 这里source.getClass().getSuperclass()为com.wang.generic.service.FetchDBCDataService
        Type genericSuperclass = source.getClass().getSuperclass().getGenericInterfaces()[0];

        // 这里source.getClass().getSuperclass()为java.lang.Object
//        Type genericSuperclass = source.getClass().getGenericInterfaces()[0];

        System.out.println("接口：" + genericSuperclass);
        System.out.println("父类：" + source.getClass().getSuperclass());
        if (genericSuperclass instanceof ParameterizedType) {
            ParameterizedType pt = (ParameterizedType) genericSuperclass;
            // 返回泛型接口的第二个参数
            return (Class) pt.getActualTypeArguments()[1];
        }
        return null;
    }

}
